package com.skh.stack;

import java.util.LinkedList;
import java.util.Queue;

/**
 * @Author: skh
 * @Date: 2019/4/15 14:24
 * @Description:
 */
public class QueueMockStack {

    /*
    用两个队列来实现一个栈
    思路:
    在push的时候，往非空的那个队列添加（刚刚初始化的时候，两个队列都为空，随便往哪个队列push都行)
    在pop的时候，如果队列1不为空，就把队列1中q1.size()-1个元素poll出来，添加到队列2中,再把队列中那个最后的元素poll出来
    这两个队列中始终有一个是空的,另一个非空。push添加元素到非空队列中，pop把非空队列中前面的元素都转移到另一个队列中，只剩最后一个元素，再把最后一个元素pop出来。
    这样这一个队列是空的，另一个队列又非空了。
     */
    Queue<Integer> queue1 = new LinkedList<>();
    Queue<Integer> queue2 = new LinkedList<>();

    public void push(Integer node) {
        //在push的时候，往非空的那个队列添加
        if (queue1.isEmpty()) {
            queue2.offer(node);
        }else {
            queue1.offer(node);
        }
    }



    public Integer pop() {
        //在pop的时候，如果队列1不为空，就把队列1中q1.size()-1个元素poll出来，添加到队列2中,再把队列中那个最后的元素poll出来
        if (!queue1.isEmpty()) {
            while (queue1.size() > 1) {
                queue2.offer(queue1.poll());
            }
            return queue1.poll();
        }else {
            while (queue2.size() > 1) {
                queue1.offer(queue2.poll());
            }
            return queue2.poll();
        }
    }

    public static void main(String[] args) {
        QueueMockStack queueMockStack = new QueueMockStack();
        queueMockStack.push(1);
        queueMockStack.push(2);
        queueMockStack.push(3);
        queueMockStack.push(4);
        queueMockStack.push(5);
        System.out.println("pop = " + queueMockStack.pop());
        System.out.println("pop = " + queueMockStack.pop());
        System.out.println("pop = " + queueMockStack.pop());
        System.out.println("pop = " + queueMockStack.pop());
        System.out.println("pop = " + queueMockStack.pop());


    }

}
